const express = require('express')
const path = require('path')
const bodyParser = require('body-parser')
const session = require('express-session')

const router = require('./routes/router')
const students = require('./routes/students')
const login = require('./routes/login')
const user = require('./routes/user')

const app = express()

// 配置中间件
// 1.在express配置模板引擎art-artTemplate,配置完成后会给response对象添加上render方法
// view engine setup
app.engine('html', require('express-art-template')); // 当在本地渲染html文件时，加载express-art-template模块
app.set('view options', {
  debug: process.env.NODE_ENV !== 'production'
});
app.set('views', path.join(__dirname, 'views')); // 设置默认寻找渲染文件路径为views/
app.set('view engine', 'html');

// 2.开放静态资源
app.use('/public/', express.static('./public/'))
app.use('/node_modules/', express.static('./node_modules/'))

// 3.配置body-parser 
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

//4.配置session
app.use(session({
  secret: 'cuifan', // 配配置加密字符串，会在你原本加密的基础上和这个字符串拼接起来去加密,更加安全
  resave: false,
  saveUninitialized: false, //  用了session才会分配钥匙
  // 无论你是否使用session,我都会给你分配一把钥匙
  // cookie: { secure: true }
}))



// 挂载路由
app.use('/', router)
app.use('/students', students)
app.use('/login', login)
app.use('/user', user)


// 5.配置404中间件

app.use((req, res, next) => {
  res.render('_exceptions/404.html')
  next()
})

// 配置全局错误中间件，当在next重传递参数的时候会来执行其中的回调函数
app.use((err, req, res, next) => {
  res.status(500).json({
    err_code: 500,
    message: err.message
  })
})

app.listen(3000, () => console.log('server is running...'))